From a37512ea464148b376bf90fed097a9a9102ef5f2 Mon Sep 17 00:00:00 2001
From: "tw275@labyrinth.cl.cam.ac.uk"
Date: Wed, 28 Jul 2004 15:41:22 +0000
Subject: [PATCH] bitkeeper revision 1.1108.30.3
(4107c922o_Bx20-5N8PsVBcjjHYmQA)
More work on wizard
---
.rootkeys | 1 +
tools/python/xen/sv/CreateDomain.py | 76 +++++++++++++--------
tools/python/xen/sv/Wizard.py | 98 +++++++++++++++++++++++-----
tools/python/xen/sv/util.py | 9 +--
tools/sv/Makefile | 3 +-
tools/sv/images/finish.png | Bin 0 -> 1189 bytes
6 files changed, 138 insertions(+), 49 deletions(-)
create mode 100644 tools/sv/images/finish.png
diff --git a/.rootkeys b/.rootkeys
index be5ccf20d1..5853abec5a 100644
--- a/.rootkeys
+++ b/.rootkeys
@@ -443,6 +443,7 @@
40cf2937Z8WCNOnO2FcWdubvEAF9QQ tools/python/xen/xm/shutdown.py
40fcefb2K1xqVVT4D-p7nL2GzS4scg tools/sv/Main.rpy
40ffbcb66Dj5F-1kCK9BcgSqCWkt1w tools/sv/Makefile
+4107c921_OR9NTSv2dKFiLCXxrXoxA tools/sv/images/finish.png
40fcefb3wXQMsl9WkgQAVtdrupm4sw tools/sv/images/left-end-highlight.jpg
40fcefb3K6ESt5sQhD9aCQRscQIlXQ tools/sv/images/left-end-no-highlight.jpg
40fcefb3BUT98zPzW8kAFKuxGdh4XA tools/sv/images/middle-highlight.jpg
diff --git a/tools/python/xen/sv/CreateDomain.py b/tools/python/xen/sv/CreateDomain.py
index 56ea043db8..62123871bd 100644
--- a/tools/python/xen/sv/CreateDomain.py
+++ b/tools/python/xen/sv/CreateDomain.py
@@ -1,46 +1,70 @@
-from xen.sv.Wizard import Wizard, Sheet
+from xen.sv.Wizard import *
+from xen.sv.util import *
class CreateDomain( Wizard ):
def __init__( self, urlWriter ):
- sheets = { 0: CreatePage0,
- 1: CreatePage1,
- 2: CreatePage2,
- 3: CreatePage3 }
+ sheets = [ CreatePage0,
+ CreatePage1,
+ CreatePage2,
+ CreatePage3,
+ CreatePage4,
+ CreateFinish ]
Wizard.__init__( self, urlWriter, "Create Domain Wizard", sheets )
class CreatePage0( Sheet ):
def __init__( self, urlWriter ):
-
- feilds = [( 'name', 'VM Name:'),
- ( 'memory', 'RAM (Mb):' )]
-
- Sheet.__init__( self, urlWriter, feilds, "Create New Domain", 0 )
-
+ Sheet.__init__( self, urlWriter, "General", 0 )
+ self.addControl( InputControl( 'vm_name', 'VM Name', 'VM Name:' ) )
+ self.addControl( InputControl( 'memory', '64', 'Memory (Mb):' ) )
+
class CreatePage1( Sheet ):
def __init__( self, urlWriter ):
-
- feilds = [( 'kernel_type', 'Kernel Type:'),
- ( 'kernel_location', 'Kernel location:')]
-
- Sheet.__init__( self, urlWriter, feilds, "Setup Kernel Image", 1 )
-
+ Sheet.__init__( self, urlWriter, "Setup Kernel Image", 1 )
+ self.addControl( InputControl( 'kernel_image', '/boot/vmlinuz-2.4.26-xenU', 'Kernel Image:' ) )
+ self.addControl( InputControl( 'kernel_params', '', 'Kernel Command Line Parame:' ) )
+
class CreatePage2( Sheet ):
def __init__( self, urlWriter ):
-
- feilds = [( 'vbd_dom0', 'Location of vbd:'),
- ( 'vbd_dom0', 'Vitualised location:')]
-
- Sheet.__init__( self, urlWriter, feilds, "Setup Virtual Block Devices", 2 )
-
+ Sheet.__init__( self, urlWriter, "Setup Virtual Block Device", 2 )
+ self.addControl( InputControl( 'num_vbds', '1', 'Number of VBDs:' ) )
+
class CreatePage3( Sheet ):
def __init__( self, urlWriter ):
-
- feilds = [( 'vifs', 'Number of Vifs:')]
+ Sheet.__init__( self, urlWriter, "Setup Virtual Block Device", 3 )
+
+ def write_BODY( self, request ):
+ previous_values = sxp2hash( string2sxp( self.passback ) ) #get the hash for quick reference
+ num_vbds = previous_values.get( 'num_vbds' )
+
+ for i in range( int( num_vbds ) ):
+ self.addControl( InputControl( 'vbd%s_dom0' % i, '/dev/sda%i' % i, 'Device %s name:' % i ) )
+ self.addControl( InputControl( 'vbd%s_domU' % i, '/dev/sda%i' % i, 'Virtualized device %s:' % i ) )
+
+ self.addControl( InputControl( 'root_dev', '/dev/sda1', 'Root device (in VM):' ) )
+
+ Sheet.write_BODY( self, request )
+
+class CreatePage4( Sheet ):
+
+ def __init__( self, urlWriter ):
+ Sheet.__init__( self, urlWriter, "Network settings", 4 )
+ self.addControl( InputControl( 'hostname', 'hostname', 'VM Hostname:' ) )
+ self.addControl( InputControl( 'ip_addr', '1.2.3.4', 'VM IP Address:' ) )
+ self.addControl( InputControl( 'ip_subnet', '255.255.255.0', 'VM Subnet Mask:' ) )
+ self.addControl( InputControl( 'ip_gateway', '1.2.3.4', 'VM Gateway:' ) )
+
+class CreateFinish( Sheet ):
+
+ def __init__( self, urlWriter ):
+ Sheet.__init__( self, urlWriter, "All Done", 5 )
- Sheet.__init__( self, urlWriter, feilds, "Create New Domain - 4", 3 )
+ def write_BODY( self, request ):
+ request.write( "%s " % sxp2prettystring( string2sxp( self.passback ) ) )
+ request.write( "
" % self.passback )
+ request.write( " " % self.location )
diff --git a/tools/python/xen/sv/Wizard.py b/tools/python/xen/sv/Wizard.py
index b9436d0ba1..d0b7a77177 100755
--- a/tools/python/xen/sv/Wizard.py
+++ b/tools/python/xen/sv/Wizard.py
@@ -32,16 +32,21 @@ class Wizard( HTMLBase ):
if op == 'next':
currSheet += 1
elif op == 'prev':
- currSheet -= 1
+ currSheet -= 1
+
+ sheet = self.sheets[ currSheet ]( self.urlWriter )
- self.sheets[ currSheet ]( self.urlWriter ).write_BODY( request )
+ sheet.parseForm( request )
+ sheet.write_BODY( request )
request.write( "" )
request.write( " " )
@@ -49,14 +54,17 @@ class Wizard( HTMLBase ):
pass
def op_prev( self, request ):
+ pass
+
+ def op_finish( self, request ):
pass
class Sheet( HTMLBase ):
- def __init__( self, urlWriter, feilds, title, location ):
+ def __init__( self, urlWriter, title, location ):
HTMLBase.__init__( self )
self.urlWriter = urlWriter
- self.feilds = feilds
+ self.feilds = []
self.title = title
self.location = location
self.passback = "()"
@@ -71,9 +79,9 @@ class Sheet( HTMLBase ):
if temp_passback is not None and len( temp_passback ) > 0:
temp_passback = temp_passback[ len( temp_passback )-1 ]
else:
- temp_passback = "(passback )"
+ temp_passback = "( )"
- last_passback = ssxp2hash( string2sxp( temp_passback ) )
+ last_passback = ssxp2hash( string2sxp( temp_passback ) ) #use special function - will work with no head on sxp
if DEBUG: print last_passback
@@ -90,22 +98,76 @@ class Sheet( HTMLBase ):
if DEBUG: print self.passback
- return last_passback #return the hash
-
def write_BODY( self, request ):
request.write( "%s
" % self.title )
- previous_values = self.parseForm( request ) #get the hash for quick reference
+ previous_values = sxp2hash( string2sxp( self.passback ) ) #get the hash for quick reference
- for (feild, name) in self.feilds:
- value = previous_values.get( feild )
- if value is None:
- value = ''
- request.write( "%s
" % (name, feild, value) )
+ request.write( "" )
+ for (feild, control) in self.feilds:
+ control.write_Control( request, previous_values.get( feild ) )
+
+ request.write( "
" )
+
request.write( " " % self.passback )
- request.write( " " % self.location )
+ request.write( " " % self.location )
+
+ def addControl( self, control ):
+ self.feilds.append( [ control.getName(), control ] )
+
+class SheetControl( HTMLBase ):
+
+ def __init__( self ):
+ HTMLBase.__init__( self )
+ self.name = ""
+
+ def write_Control( self, request, persistedValue ):
+ request.write( "%s " % persistedValue )
+
+ def validate( self ):
+ return True
+
+ def getName( self ):
+ return self.name
+
+ def setName( self, name ):
+ self.name = name
+
+class InputControl( SheetControl ):
+
+ def __init__( self, name, defaultValue, humanText):
+ SheetControl.__init__( self )
+ self.setName( name )
+
+ self.defaultValue = defaultValue
+ self.humanText = humanText
+
+ def write_Control( self, request, persistedValue ):
+ if persistedValue is None:
+ persistedValue = self.defaultValue
+
+ request.write( "%s
" % (self.humanText, self.getName(), persistedValue) )
+
+class TextControl( SheetControl ):
+
+ def __init__( self, text ):
+ SheetControl.__init__( self )
+ self.text = text
+
+ def write_Control( self, request, persistedValue ):
+ request.write( "%s
" % self.text )
+
+class SmallTextControl( SheetControl ):
+
+ def __init__( self, text ):
+ SheetControl.__init__( self )
+ self.text = text
+
+ def write_Control( self, request, persistedValue ):
+ request.write( "%s
" % self.text )
+
diff --git a/tools/python/xen/sv/util.py b/tools/python/xen/sv/util.py
index c14137609f..b332b60482 100755
--- a/tools/python/xen/sv/util.py
+++ b/tools/python/xen/sv/util.py
@@ -13,10 +13,11 @@ def sxp2hash( s ):
sxphash = {}
for child in sxp.children( s ):
- if child is types.ListType:
- sxphash[ child[0] ] = sxp2hash( child[1] )
- else:
- sxphash[ child[0] ] = child[1]
+ if isinstance( child, types.ListType ) and len( child ) > 1:
+ if isinstance( child[1], types.ListType ) and len( child ) > 1:
+ sxphash[ child[0] ] = sxp2hash( child[1] )
+ else:
+ sxphash[ child[0] ] = child[1]
return sxphash
diff --git a/tools/sv/Makefile b/tools/sv/Makefile
index b8f2a7a116..c7bd3d5880 100755
--- a/tools/sv/Makefile
+++ b/tools/sv/Makefile
@@ -36,7 +36,8 @@ install:
install -m0644 images/next.png $(sv_insdir)/images
install -m0644 images/previous.png $(sv_insdir)/images
-
+ install -m0644 images/finish.png $(sv_insdir)/images
+
# make include folder
mkdir -p $(sv_insdir)/inc
diff --git a/tools/sv/images/finish.png b/tools/sv/images/finish.png
new file mode 100644
index 0000000000000000000000000000000000000000..6c5d18a9b7f6091f3a92723f27029b7629ee45e0
GIT binary patch
literal 1189
zcmV;W1X}xvP)?bz6rVnQ>h|v4JG-}U-)epM@Im_j|Nm@2<-fSN
zxL%5ji(h7CWj&^(q_iEV{_fwue;Gc1{>mdTuC87O^zkGhX88U4H(U)s
z0HIh03=SrsZ#s@0J5~yFG0X=rOOV;v04NwiKvh+BmYJDZKG2~*U}69P!~#nx!vO+_3FH!>HHYHMixEHo
zvAlo(UW%9$2ueJ1a&io6YHAF8e0*TTK|Tce4(3Aw!TBE`fS7=qm3f($%7
zJYbiCLIdPe5JoNl@Bx4T0$KK-7=@rB2jm0fvJT`MVC2J#D0~2D&0l~3Vgd%mGh*xm
z8T|P1V=(^u^(!b2!149``EwKp;0sBB0Adjq7QPIuLbM5GXprk)y?O=q9k3Vzm-4_Y
z15O+uHWB&lEkFRVaB^~90@6zy!qrbR4`|A;uz5))EpDS_=?BOu$HA1FT_x
z5E*swdJBY!u?Xs`Z@`e-0}w!z+BPf&h0F(1i
zbl(x{TLPB726|>T$R2i9B06IPgm=1o!%mB#)1P~K?f&eP~2W*b@0rQ0mP{9_UtG4m{ftLCLgH#